{{!
  Copyright (c) HashiCorp, Inc.
  SPDX-License-Identifier: BUSL-1.1
~}}

<Identity::EntityNav @identityType={{this.identityType}} @model={{this.model}} />
{{#if this.model.meta.total}}
  {{#each this.model as |item|}}
    <LinkedBlock
      @params={{array "vault.cluster.access.identity.show" item.id "details"}}
      class="list-item-row"
      data-test-identity-row
    >
      <div class="columns is-mobile">
        <div class="column is-7-tablet is-10-mobile">
          <LinkTo
            @route="vault.cluster.access.identity.show"
            @models={{array item.id "details"}}
            class="is-block has-text-black has-text-weight-semibold"
            data-test-identity-link={{true}}
          >
            <Icon @name="user" class="has-text-grey-light" />
            <span class="has-text-weight-semibold">{{item.name}}</span>
          </LinkTo>
          <div class="has-text-grey is-size-8">
            {{item.id}}
          </div>
        </div>
        <div class="column is-3 is-hidden-mobile">
          {{#if item.aliases.length}}
            {{pluralize item.aliases.length "alias"}}
          {{/if}}
        </div>
        <div class="column has-text-right">
          <PopupMenu @name="identity-item" @onOpen={{action "reloadRecord" item}}>
            <nav class="menu">
              <ul class="menu-list">
                <li class="action">
                  <LinkTo @route="vault.cluster.access.identity.show" @models={{array item.id "details"}}>
                    Details
                  </LinkTo>
                </li>
                {{#if (or item.isReloading item.updatePath.isPending item.aliasPath.isPending)}}
                  <li class="action">
                    <LoadingDropdownOption />
                  </li>
                {{else}}
                  {{#if item.canAddAlias}}
                    <li class="action">
                      <LinkTo
                        @route="vault.cluster.access.identity.aliases.add"
                        @models={{array (pluralize this.identityType) item.id}}
                      >
                        Create alias
                      </LinkTo>
                    </li>
                  {{/if}}
                  {{#if item.canEdit}}
                    <li class="action">
                      <LinkTo @route="vault.cluster.access.identity.edit" @model={{item.id}}>
                        Edit
                      </LinkTo>
                    </li>
                    <li class="action">
                      {{#if item.disabled}}
                        <Hds::Button @text="Enable" {{on "click" (action "toggleDisabled" item)}} class="link" />
                      {{else if (eq this.identityType "entity")}}
                        <ConfirmAction
                          @isInDropdown={{true}}
                          @buttonText="Disable"
                          @confirmMessage="Associated tokens will not be revoked, but cannot be used"
                          @confirmTitle="Disable this entity?"
                          @onConfirmAction={{action "toggleDisabled" item}}
                          @modalColor="warning"
                        />
                      {{/if}}
                    </li>
                  {{/if}}
                  {{#if item.canDelete}}
                    <ConfirmAction
                      @isInDropdown={{true}}
                      @buttonText="Delete"
                      @onConfirmAction={{action "delete" item}}
                      @confirmTitle="Delete this {{this.identityType}}?"
                      data-test-item-delete
                    />
                  {{/if}}
                {{/if}}
              </ul>
            </nav>
          </PopupMenu>
        </div>
      </div>
    </LinkedBlock>
  {{/each}}

  <Hds::Pagination::Numbered
    @currentPage={{this.model.meta.currentPage}}
    @currentPageSize={{this.model.meta.pageSize}}
    @route="vault.cluster.access.identity.index"
    @showSizeSelector={{false}}
    @totalItems={{this.model.meta.total}}
    @queryFunction={{this.paginationQueryParams}}
  />

{{else}}
  <EmptyState
    @title="No {{pluralize this.identityType}} yet"
    @message="A list of {{pluralize
      this.identityType
    }} in this namespace will be listed here. Create your first {{this.identityType}} to get started."
  >
    <LinkTo @route="vault.cluster.access.identity.create" @model={{pluralize this.identityType}} class="link">
      Create
      {{this.identityType}}
    </LinkTo>
    <DocLink @path="/vault/tutorials/auth-methods/identity">
      Learn more
    </DocLink>
  </EmptyState>
{{/if}}